// 首先--缓存管理类
import 'package:shared_preferences/shared_preferences.dart';

/*
shared_preferences使用步骤：
1、得到SharedPreferences对象
2、调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象。
3、向SharedPreferences.Editor对象中添加数据。
4、调用commit方法将添加的数据提交。
 */

// 缓存类    --第一步
class HiCache {
  // 第二步
  SharedPreferences prefs;

  // 创建单例  --第三步
  HiCache._() {
    init();
  }

  // 既然有单例 就有一个静态实例
  static HiCache _instance;

  static HiCache getInstance() {
    if (_instance == null) {
      _instance = HiCache._();
    }
    return _instance;
  }

  // 初始化 -//缓存实例 第四步
  void init() async {
    if (prefs == null) {
      prefs = await SharedPreferences.getInstance();
    }
  }

  // 第五步 预初始化，方式在使用get时，prefs还未完成初始化
  HiCache._pre(SharedPreferences prefs) {
    this.prefs = prefs;
  }
  static Future<HiCache> preInit() async {
    if (_instance == null) {
      var prefs = await SharedPreferences.getInstance();
      _instance = HiCache._pre(prefs);
    }
    return _instance;
  }

  // 第六步
  setString(String key, String value) {
    prefs.setString(key, value);
  }

  setDouble(String key, double value) {
    prefs.setDouble(key, value);
  }

  setInt(String key, int value) {
    prefs.setInt(key, value);
  }

  setBool(String key, bool value) {
    prefs.setBool(key, value);
  }

  setStringList(String key, List<String> value) {
    prefs.setStringList(key, value);
  }

  T get<T>(String key) {
    return prefs?.get(key) ?? null;
  }

  // set<T>(String key, T value) {
  //   if (T == String) {
  //     prefs.setString(key, value as String);
  //   }else{}
  // }
}


/*
使用 
HiCache.getInstance().setString('aa','1234')

获取发现为空也许是初始化时间太靠后了，可以考虑在main.dart的时候 就初始化
*/